package com.atguigu.lease.web.admin.service.impl;

import com.atguigu.lease.model.entity.SystemPost;
import com.atguigu.lease.model.entity.SystemUser;
import com.atguigu.lease.web.admin.mapper.SystemPostMapper;
import com.atguigu.lease.web.admin.mapper.SystemUserMapper;
import com.atguigu.lease.web.admin.service.SystemPostService;
import com.atguigu.lease.web.admin.service.SystemUserService;
import com.atguigu.lease.web.admin.vo.system.user.SystemUserItemVo;
import com.atguigu.lease.web.admin.vo.system.user.SystemUserQueryVo;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collector;
import java.util.stream.Collectors;

/**
 * @author liubo
 * @description 针对表【system_user(员工信息表)】的数据库操作Service实现
 * @createDate 2023-07-24 15:48:00
 */
@Service
public class SystemUserServiceImpl extends ServiceImpl<SystemUserMapper, SystemUser>
        implements SystemUserService {
    @Autowired
    SystemUserMapper systemUserMapper;

    @Autowired
    SystemPostMapper systemPostMapper;

    private final NamedParameterJdbcTemplate namedParameterJdbcTemplate;

    public SystemUserServiceImpl(NamedParameterJdbcTemplate namedParameterJdbcTemplate) {
        this.namedParameterJdbcTemplate = namedParameterJdbcTemplate;
    }

    @Override
    public IPage<SystemUserItemVo> systemUserPage(IPage<SystemUser> page, SystemUserQueryVo queryVo) {
//        //这里得到的是systemUserPage,但是我们需要返回Vo类型的，所以需要转换一下。
//        //1.先把systemUserPage查出来
//        QueryWrapper<SystemUser> systemUserQueryWrapper = new QueryWrapper<>();
//        String name = queryVo.getName();
//        String phone = queryVo.getPhone();
//        systemUserQueryWrapper.like(StringUtils.hasText(name),"name",name);
//        systemUserQueryWrapper.like(StringUtils.hasText(phone),"phone",phone);
//        IPage<SystemUser> systemUserIPage = baseMapper.selectPage(page,systemUserQueryWrapper);
//
//        //转换systemUserPage为systemUserPageVo
//        ArrayList<SystemUserItemVo> systemUserItemVos = new ArrayList<>();
//        List<SystemUser> systemUsers = systemUserIPage.getRecords();
//        for (SystemUser systemUser : systemUsers) {
//            Long systemUserId = systemUser.getId();
//            SystemPost systemPost = systemPostMapper.selectById(systemUserId);
//            SystemUserItemVo systemUserItemVo = new SystemUserItemVo();
//            BeanUtils.copyProperties(systemUsers,systemUserItemVo);
//            String postName = systemPost.getName();
//            systemUserItemVo.setPostName(postName);
//            systemUserItemVos.add(systemUserItemVo);
//        }
//
//
//        Page<SystemUserItemVo> systemUserItemVoPage = new Page<SystemUserItemVo>();
//        systemUserItemVoPage.setSize(systemUserIPage.getSize());
//        systemUserItemVoPage.setCurrent(systemUserIPage.getCurrent());
//        systemUserItemVoPage.setCurrent(systemUserIPage.getTotal());
//        systemUserItemVoPage.setRecords(systemUserItemVos);
//        return systemUserItemVoPage;


//        =================================================================================
//        QueryWrapper<SystemUser> systemUserQueryWrapper =  new QueryWrapper<>();
//        String phone = queryVo.getPhone();
//        String name = queryVo.getName();
//        systemUserQueryWrapper.like(StringUtils.hasText(name),"name",name);
//        systemUserQueryWrapper.like(StringUtils.hasText(phone),"phone",phone);
//        IPage<SystemUser> systemUserPage = baseMapper.selectPage(page,systemUserQueryWrapper);
        LambdaQueryWrapper<SystemUser> systemUserLambdaQueryWrapper = new LambdaQueryWrapper<>();
        String name = queryVo.getName();
        String phone = queryVo.getPhone();
        systemUserLambdaQueryWrapper.like(StringUtils.hasText(name),SystemUser::getName,name);
        systemUserLambdaQueryWrapper.like(StringUtils.hasText(phone),SystemUser::getPhone,phone);
        IPage<SystemUser> systemUserIPage = baseMapper.selectPage(page, systemUserLambdaQueryWrapper);
//
//        /***
//         * 查询职位信息列表，并且处理成一个map
//         */
//        List<SystemPost> systemPosts = systemPostMapper.selectList(null);
//        Map<Long, String> postMap = systemPosts.stream().collect(Collectors.toMap(SystemPost::getId, SystemPost::getName));
        //集合转换成map
        List<SystemPost> systemPosts = systemPostMapper.selectList(null);
        Map<Long, String> postMap = systemPosts.stream().collect(Collectors.toMap(SystemPost::getId, SystemPost::getName));

//        // 将SystemUser的Page转成SystemUserItemVo的page
//        List<SystemUser> systemUsers = systemUserPage.getRecords();// 数据库中查出的systemUser列表数据
//        List<SystemUserItemVo> systemUserItemVos = new ArrayList<>();// 声明的用来封装Vo的集合
//        for (SystemUser systemUser : systemUsers) {
//            SystemUserItemVo systemUserItemVo = new SystemUserItemVo();
//            BeanUtils.copyProperties(systemUser,systemUserItemVo);
//            systemUserItemVo.setPostName(postMap.get(systemUser.getPostId()));// 封装职位信息
//            systemUserItemVos.add(systemUserItemVo);
//        }
        List<SystemUser> systemUserPages = systemUserIPage.getRecords();
        ArrayList<SystemUserItemVo> systemUserItemVos = new ArrayList<>();
        for (SystemUser systemUserPage : systemUserPages) {
            SystemUserItemVo systemUserItemVo = new SystemUserItemVo();
            BeanUtils.copyProperties(systemUserPage,systemUserItemVo);
            systemUserItemVo.setPostName(postMap.get(systemUserPage.getPostId()));
            systemUserItemVos.add(systemUserItemVo);
        }


//
//        IPage<SystemUserItemVo> systemUserItemVoIPage = new Page<>();
//        systemUserItemVoIPage.setSize(systemUserPage.getSize());
//        systemUserItemVoIPage.setCurrent(systemUserPage.getCurrent());
//        systemUserItemVoIPage.setTotal(systemUserPage.getTotal());
//        systemUserItemVoIPage.setRecords(systemUserItemVos);
//        return systemUserItemVoIPage;
        IPage<SystemUserItemVo> systemUserItemVoPage = new Page<>();
        systemUserItemVoPage.setCurrent(systemUserIPage.getCurrent());
        systemUserItemVoPage.setSize(systemUserIPage.getSize());
        systemUserItemVoPage.setTotal(systemUserIPage.getTotal());
        systemUserItemVoPage.setRecords(systemUserItemVos);

        return systemUserItemVoPage;

    }

    @Override
    public SystemUserItemVo getSystemUserById(Long id) {

        //SystemUser ----> SystemUserItemVo
        //SystemUser systemUser1 = systemUserMapper.selectById(id);
        SystemUser systemUser = getById(id);//还有一个这样的方法？？
        systemUser.setPassword(null);   //密码不应该被查出来
        SystemPost systemPost = systemPostMapper.selectById(systemUser.getId());

        SystemUserItemVo systemUserItemVo = new SystemUserItemVo();
        BeanUtils.copyProperties(systemUser,systemUserItemVo);
        systemUserItemVo.setPostName(systemPost.getName());
        return systemUserItemVo;

    }

    @Override
    public IPage<SystemUserItemVo> getSystemUserPage(IPage<SystemUser> systemUserPage, SystemUserQueryVo queryVo) {
        IPage<SystemUserItemVo> systemUserItemVoIPage = systemUserMapper.selectSystemUserVoPage(systemUserPage,queryVo);
        return systemUserItemVoIPage;
    }


}




